🎖️GitЯра🎖️
Node / meshtastic / Meshtastic-Android / files / core / ui / src / commonMain / kotlin / org / meshtastic / core / ui / qr / ScannedQrCodeDialog.kt
Displaying Raw • Download
core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/qr/ScannedQrCodeDialog.kt 1390a3cd4f7bc55a37433d1d868e65c01678eb31 (1390a3cd) Text, 13.47 KB
T8b949e/*
* Copyright (c) 2025-2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tff7b72package T7ee787org.meshtastic.core.ui.qr
Tff7b72import T7ee787androidx.compose.foundation.layout.Arrangement
Tff7b72import T7ee787androidx.compose.foundation.layout.ExperimentalLayoutApi
Tff7b72import T7ee787androidx.compose.foundation.layout.FlowRow
Tff7b72import T7ee787androidx.compose.foundation.layout.PaddingValues
Tff7b72import T7ee787androidx.compose.foundation.layout.Row
Tff7b72import T7ee787androidx.compose.foundation.layout.fillMaxWidth
Tff7b72import T7ee787androidx.compose.foundation.layout.height
Tff7b72import T7ee787androidx.compose.foundation.layout.padding
Tff7b72import T7ee787androidx.compose.foundation.layout.widthIn
Tff7b72import T7ee787androidx.compose.foundation.lazy.LazyColumn
Tff7b72import T7ee787androidx.compose.foundation.lazy.itemsIndexed
Tff7b72import T7ee787androidx.compose.foundation.shape.RoundedCornerShape
Tff7b72import T7ee787androidx.compose.material3.ButtonDefaults
Tff7b72import T7ee787androidx.compose.material3.MaterialTheme
Tff7b72import T7ee787androidx.compose.material3.OutlinedButton
Tff7b72import T7ee787androidx.compose.material3.Surface
Tff7b72import T7ee787androidx.compose.material3.Text
Tff7b72import T7ee787androidx.compose.material3.TextButton
Tff7b72import T7ee787androidx.compose.runtime.Composable
Tff7b72import T7ee787androidx.compose.runtime.getValue
Tff7b72import T7ee787androidx.compose.runtime.mutableStateListOf
Tff7b72import T7ee787androidx.compose.runtime.mutableStateOf
Tff7b72import T7ee787androidx.compose.runtime.remember
Tff7b72import T7ee787androidx.compose.runtime.setValue
Tff7b72import T7ee787androidx.compose.ui.Alignment
Tff7b72import T7ee787androidx.compose.ui.Modifier
Tff7b72import T7ee787androidx.compose.ui.text.style.TextOverflow
Tff7b72import T7ee787androidx.compose.ui.tooling.preview.PreviewLightDark
Tff7b72import T7ee787androidx.compose.ui.unit.dp
Tff7b72import T7ee787androidx.compose.ui.window.Dialog
Tff7b72import T7ee787androidx.compose.ui.window.DialogProperties
Tff7b72import T7ee787androidx.lifecycle.compose.collectAsStateWithLifecycle
Tff7b72import T7ee787org.jetbrains.compose.resources.stringResource
Tff7b72import T7ee787org.koin.compose.viewmodel.koinViewModel
Tff7b72import T7ee787org.meshtastic.core.model.Channel
Tff7b72import T7ee787org.meshtastic.core.resources.Res
Tff7b72import T7ee787org.meshtastic.core.resources.accept
Tff7b72import T7ee787org.meshtastic.core.resources.add
Tff7b72import T7ee787org.meshtastic.core.resources.add_channels_description
Tff7b72import T7ee787org.meshtastic.core.resources.cancel
Tff7b72import T7ee787org.meshtastic.core.resources.new_channel_rcvd
Tff7b72import T7ee787org.meshtastic.core.resources.replace
Tff7b72import T7ee787org.meshtastic.core.resources.replace_channels_and_settings_description
Tff7b72import T7ee787org.meshtastic.core.ui.component.ChannelSelection
Tff7b72import T7ee787org.meshtastic.proto.ChannelSet
Tf0883e@Composable
Tff7b72fun Td2a8ffScannedQrCodeDialogTb4b4b4(
Te6edf3incomingTb4b4b4: Te6edf3ChannelSetTb4b4b4,
Te6edf3onDismissTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3viewModelTb4b4b4: Te6edf3ScannedQrCodeViewModel Tff7b72= Te6edf3koinViewModelTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3channels Tff7b72by Te6edf3viewModelTb4b4b4.Te6edf3channelsTb4b4b4.Te6edf3collectAsStateWithLifecycleTb4b4b4(Tb4b4b4)
Te6edf3ScannedQrCodeDialogTb4b4b4(
Te6edf3channels Tff7b72= Te6edf3channelsTb4b4b4,
Te6edf3incoming Tff7b72= Te6edf3incomingTb4b4b4,
Te6edf3onDismiss Tff7b72= Te6edf3onDismissTb4b4b4,
Te6edf3onConfirm Tff7b72= Te6edf3viewModelTff7b72::Te6edf3setChannelsTb4b4b4,
Tb4b4b4)
Tb4b4b4}
T8b949e/** Enables the user to select which channels to accept after scanning a QR code. */
Tf0883e@OptInTb4b4b4(Te6edf3ExperimentalLayoutApiTff7b72::Te6edf3classTb4b4b4)
Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffLongMethodTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffCyclomaticComplexMethodTa5d6ff"Tb4b4b4)
Tf0883e@Composable
Tff7b72fun Td2a8ffScannedQrCodeDialogTb4b4b4(
Te6edf3channelsTb4b4b4: Te6edf3ChannelSetTb4b4b4,
Te6edf3incomingTb4b4b4: Te6edf3ChannelSetTb4b4b4,
Te6edf3onDismissTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3onConfirmTb4b4b4: Tb4b4b4(Te6edf3ChannelSetTb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Tb4b4b4) Tb4b4b4{
Tff7b72var Te6edf3shouldReplace Tff7b72by Te6edf3remember Tb4b4b4{ Te6edf3mutableStateOfTb4b4b4(Te6edf3incomingTb4b4b4.Te6edf3lora_config Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4}
Tff7b72val Te6edf3channelSet Tff7b72=
Te6edf3rememberTb4b4b4(Te6edf3shouldReplaceTb4b4b4, Te6edf3channelsTb4b4b4, Te6edf3incomingTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3shouldReplaceTb4b4b4) Tb4b4b4{
T8b949e// When replacing, apply the incoming LoRa configuration but preserve certain
T8b949e// locally safe fields such as MQTT flags and TX power. This prevents QR codes
T8b949e// from unintentionally overriding device-specific power limits (e.g. E22 caps).
Te6edf3incomingTb4b4b4.Te6edf3copyTb4b4b4(
Te6edf3lora_config Tff7b72=
Te6edf3incomingTb4b4b4.Te6edf3lora_configTff7b72?.Te6edf3copyTb4b4b4(
Te6edf3config_ok_to_mqtt Tff7b72= Te6edf3channelsTb4b4b4.Te6edf3lora_configTff7b72?.Te6edf3config_ok_to_mqtt Tff7b72?: Tff7b72falseTb4b4b4,
Te6edf3tx_power Tff7b72= Te6edf3channelsTb4b4b4.Te6edf3lora_configTff7b72?.Te6edf3tx_power Tff7b72?: T79c0ff0Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
T8b949e// To guarantee consistent ordering, using a LinkedHashSet which iterates through
T8b949e// its entries according to the order an item was *first* inserted.
Tff7b72val Te6edf3result Tff7b72= Tb4b4b4(Te6edf3channelsTb4b4b4.Te6edf3settings Tff7b72+ Te6edf3incomingTb4b4b4.Te6edf3settingsTb4b4b4)Tb4b4b4.Te6edf3distinctTb4b4b4(Tb4b4b4)
Te6edf3channelsTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3settings Tff7b72= Te6edf3resultTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tff7b72val Te6edf3modemPresetName Tff7b72= Te6edf3ChannelTb4b4b4(Te6edf3loraConfig Tff7b72= Te6edf3channelSetTb4b4b4.Te6edf3lora_config Tff7b72?: Te6edf3ChannelTb4b4b4.Te6edf3defaultTb4b4b4.Te6edf3loraConfigTb4b4b4)Tb4b4b4.Te6edf3name
T8b949e/* Holds selections made by the user */
Tff7b72val Te6edf3channelSelections Tff7b72=
Te6edf3rememberTb4b4b4(Te6edf3channelSetTb4b4b4) Tb4b4b4{ Te6edf3mutableStateListOfTb4b4b4(Te6edf3elements Tff7b72= Te6edf3ArrayTb4b4b4(Te6edf3size Tff7b72= Te6edf3channelSetTb4b4b4.Te6edf3settingsTb4b4b4.Te6edf3sizeTb4b4b4, Tff7b72init Tff7b72= Tb4b4b4{ Tff7b72true Tb4b4b4}Tb4b4b4)Tb4b4b4) Tb4b4b4}
Tff7b72val Te6edf3selectedChannelSet Tff7b72=
Tff7b72if Tb4b4b4(Te6edf3shouldReplaceTb4b4b4) Tb4b4b4{
Te6edf3channelSetTb4b4b4.Te6edf3copyTb4b4b4(
Te6edf3settings Tff7b72= Te6edf3channelSetTb4b4b4.Te6edf3settingsTb4b4b4.Te6edf3filterIndexed Tb4b4b4{ Te6edf3iTb4b4b4, Te6edf3_ Tff7b72-Tff7b72> Te6edf3channelSelectionsTb4b4b4.Te6edf3getOrNullTb4b4b4(Te6edf3iTb4b4b4) Tff7b72=Tff7b72= Tff7b72true Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3channelSetTb4b4b4.Te6edf3copyTb4b4b4(
Te6edf3settings Tff7b72=
Te6edf3channelSetTb4b4b4.Te6edf3settingsTb4b4b4.Te6edf3filterIndexed Tb4b4b4{ Te6edf3iTb4b4b4, Te6edf3_ Tff7b72-Tff7b72>
Tff7b72val Te6edf3isExisting Tff7b72= Te6edf3i Tff7b72< Te6edf3channelsTb4b4b4.Te6edf3settingsTb4b4b4.Te6edf3size
Te6edf3isExisting Tff7b72|Tff7b72| Te6edf3channelSelectionsTb4b4b4.Te6edf3getOrNullTb4b4b4(Te6edf3iTb4b4b4) Tff7b72=Tff7b72= Tff7b72true
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
T8b949e// Compute LoRa configuration changes when in replace mode
Tff7b72val Te6edf3loraChanges Tff7b72=
Te6edf3rememberTb4b4b4(Te6edf3shouldReplaceTb4b4b4, Te6edf3channelsTb4b4b4, Te6edf3incomingTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3shouldReplace Tff7b72&Tff7b72& Te6edf3incomingTb4b4b4.Te6edf3lora_config Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3current Tff7b72= Te6edf3channelsTb4b4b4.Te6edf3lora_config
Tff7b72val Te6edf3new Tff7b72= Te6edf3incomingTb4b4b4.Te6edf3lora_config
Tff7b72val Te6edf3changes Tff7b72= Te6edf3mutableListOfTff7b72<Tffa657StringTff7b72>Tb4b4b4(Tb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3currentTff7b72?.Te6edf3hop_limit Tff7b72!Tff7b72= Te6edf3newTff7b72?.Te6edf3hop_limitTb4b4b4) Tb4b4b4{
Te6edf3changesTb4b4b4.Te6edf3addTb4b4b4(Ta5d6ff"Ta5d6ffHop Limit: Tffd700${Te6edf3currentTff7b72?.Te6edf3hop_limitTffd700}Ta5d6ff -> Tffd700${Te6edf3newTff7b72?.Te6edf3hop_limitTffd700}Ta5d6ff"Tb4b4b4)
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3currentTff7b72?.Te6edf3region Tff7b72!Tff7b72= Te6edf3newTff7b72?.Te6edf3regionTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3currentRegionDesc Tff7b72= Te6edf3currentTff7b72?.Te6edf3regionTff7b72?.Te6edf3name Tff7b72?: Ta5d6ff"Ta5d6ffUnknownTa5d6ff"
Tff7b72val Te6edf3newRegionDesc Tff7b72= Te6edf3newTff7b72?.Te6edf3regionTff7b72?.Te6edf3name Tff7b72?: Ta5d6ff"Ta5d6ffUnknownTa5d6ff"
Te6edf3changesTb4b4b4.Te6edf3addTb4b4b4(Ta5d6ff"Ta5d6ffRegion: Tffd700$Te6edf3currentRegionDescTa5d6ff -> Tffd700$Te6edf3newRegionDescTa5d6ff"Tb4b4b4)
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3currentTff7b72?.Te6edf3modem_preset Tff7b72!Tff7b72= Te6edf3newTff7b72?.Te6edf3modem_presetTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3currentPresetDesc Tff7b72= Te6edf3currentTff7b72?.Te6edf3modem_presetTff7b72?.Te6edf3name Tff7b72?: Ta5d6ff"Ta5d6ffUnknownTa5d6ff"
Tff7b72val Te6edf3newPresetDesc Tff7b72= Te6edf3newTff7b72?.Te6edf3modem_presetTff7b72?.Te6edf3name Tff7b72?: Ta5d6ff"Ta5d6ffUnknownTa5d6ff"
Te6edf3changesTb4b4b4.Te6edf3addTb4b4b4(Ta5d6ff"Ta5d6ffModem Preset: Tffd700$Te6edf3currentPresetDescTa5d6ff -> Tffd700$Te6edf3newPresetDescTa5d6ff"Tb4b4b4)
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3currentTff7b72?.Te6edf3use_preset Tff7b72!Tff7b72= Te6edf3newTff7b72?.Te6edf3use_presetTb4b4b4) Tb4b4b4{
Te6edf3changesTb4b4b4.Te6edf3addTb4b4b4(Ta5d6ff"Ta5d6ffUse Preset: Tffd700${Te6edf3currentTff7b72?.Te6edf3use_presetTffd700}Ta5d6ff -> Tffd700${Te6edf3newTff7b72?.Te6edf3use_presetTffd700}Ta5d6ff"Tb4b4b4)
Tb4b4b4}
Te6edf3changes
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3emptyListTb4b4b4(Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Te6edf3DialogTb4b4b4(
Te6edf3onDismissRequest Tff7b72= Tb4b4b4{ Te6edf3onDismissTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3properties Tff7b72= Te6edf3DialogPropertiesTb4b4b4(Te6edf3usePlatformDefaultWidth Tff7b72= Tff7b72falseTb4b4b4, Te6edf3dismissOnBackPress Tff7b72= Tff7b72trueTb4b4b4)Tb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3SurfaceTb4b4b4(
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3widthInTb4b4b4(Te6edf3max Tff7b72= T79c0ff6T79c0ff0T79c0ff0.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3shape Tff7b72= Te6edf3RoundedCornerShapeTb4b4b4(T79c0ff1T79c0ff6.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3color Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3backgroundTb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3LazyColumnTb4b4b4(
Te6edf3contentPadding Tff7b72= Te6edf3PaddingValuesTb4b4b4(Te6edf3horizontal Tff7b72= T79c0ff2T79c0ff4.Te6edf3dpTb4b4b4, Te6edf3vertical Tff7b72= T79c0ff1T79c0ff6.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3horizontalAlignment Tff7b72= Te6edf3AlignmentTb4b4b4.Te6edf3CenterHorizontallyTb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3item Tb4b4b4{
Te6edf3TextTb4b4b4(
Te6edf3text Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3new_channel_rcvdTb4b4b4)Tb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3paddingTb4b4b4(T79c0ff2T79c0ff0.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3titleLargeTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Te6edf3item Tb4b4b4{
Te6edf3TextTb4b4b4(
Te6edf3text Tff7b72=
Te6edf3stringResourceTb4b4b4(
Tff7b72if Tb4b4b4(Te6edf3shouldReplaceTb4b4b4) Tb4b4b4{
Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3replace_channels_and_settings_description
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3add_channels_description
Tb4b4b4}Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3paddingTb4b4b4(Te6edf3bottom Tff7b72= T79c0ff1T79c0ff6.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3bodyMediumTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Te6edf3itemsIndexedTb4b4b4(Te6edf3channelSetTb4b4b4.Te6edf3settingsTb4b4b4) Tb4b4b4{ Te6edf3indexTb4b4b4, Te6edf3channel Tff7b72-Tff7b72>
Tff7b72val Te6edf3isExisting Tff7b72= Tff7b72!Te6edf3shouldReplace Tff7b72&Tff7b72& Te6edf3index Tff7b72< Te6edf3channelsTb4b4b4.Te6edf3settingsTb4b4b4.Te6edf3size
Tff7b72val Te6edf3channelObj Tff7b72= Te6edf3ChannelTb4b4b4(Te6edf3channelTb4b4b4, Te6edf3channelSetTb4b4b4.Te6edf3lora_config Tff7b72?: Te6edf3ChannelTb4b4b4.Te6edf3defaultTb4b4b4.Te6edf3loraConfigTb4b4b4)
Te6edf3ChannelSelectionTb4b4b4(
Te6edf3index Tff7b72= Te6edf3indexTb4b4b4,
Te6edf3title Tff7b72= Te6edf3channelTb4b4b4.Te6edf3nameTb4b4b4.Te6edf3ifEmpty Tb4b4b4{ Te6edf3modemPresetName Tb4b4b4}Tb4b4b4,
Te6edf3enabled Tff7b72= Tff7b72!Te6edf3isExistingTb4b4b4,
Te6edf3isSelected Tff7b72= Tff7b72if Tb4b4b4(Te6edf3isExistingTb4b4b4) Tff7b72true Tff7b72else Te6edf3channelSelectionsTff7b72[Te6edf3indexTff7b72]Tb4b4b4,
Te6edf3onSelected Tff7b72= Tb4b4b4{
Tff7b72if Tb4b4b4(Tffa657it Tff7b72|Tff7b72| Te6edf3selectedChannelSetTb4b4b4.Te6edf3settingsTb4b4b4.Te6edf3size Tff7b72> T79c0ff1Tb4b4b4) Tb4b4b4{
Te6edf3channelSelectionsTff7b72[Te6edf3indexTff7b72] Tff7b72= Tffa657it
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3channel Tff7b72= Te6edf3channelObjTb4b4b4,
Tb4b4b4)
Tb4b4b4}
T8b949e// Display LoRa configuration changes when in replace mode
Tff7b72if Tb4b4b4(Te6edf3shouldReplace Tff7b72&Tff7b72& Te6edf3loraChangesTb4b4b4.Te6edf3isNotEmptyTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3item Tb4b4b4{
Te6edf3TextTb4b4b4(
Te6edf3text Tff7b72= Ta5d6ff"Ta5d6ffLoRa Configuration Changes:Ta5d6ff"Tb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3paddingTb4b4b4(Te6edf3top Tff7b72= T79c0ff1T79c0ff6.Te6edf3dpTb4b4b4, Te6edf3bottom Tff7b72= T79c0ff8.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3titleMediumTb4b4b4,
Tb4b4b4)
Te6edf3loraChangesTb4b4b4.Te6edf3forEach Tb4b4b4{ Te6edf3change Tff7b72-Tff7b72>
Te6edf3TextTb4b4b4(
Te6edf3text Tff7b72= Ta5d6ff"Ta5d6ff• Tffd700$Te6edf3changeTa5d6ff"Tb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3paddingTb4b4b4(Te6edf3start Tff7b72= T79c0ff1T79c0ff6.Te6edf3dpTb4b4b4, Te6edf3bottom Tff7b72= T79c0ff4.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3bodyMediumTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Te6edf3item Tb4b4b4{
Te6edf3RowTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3paddingTb4b4b4(Te6edf3vertical Tff7b72= T79c0ff2T79c0ff0.Te6edf3dpTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3selectedColors Tff7b72= Te6edf3ButtonDefaultsTb4b4b4.Te6edf3buttonColorsTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3unselectedColors Tff7b72=
Te6edf3ButtonDefaultsTb4b4b4.Te6edf3outlinedButtonColorsTb4b4b4(Te6edf3contentColor Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3onSurfaceTb4b4b4)
Te6edf3OutlinedButtonTb4b4b4(
Te6edf3onClick Tff7b72= Tb4b4b4{ Te6edf3shouldReplace Tff7b72= Tff7b72false Tb4b4b4}Tb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3heightTb4b4b4(T79c0ff4T79c0ff8.Te6edf3dpTb4b4b4)Tb4b4b4.Te6edf3weightTb4b4b4(T79c0ff1fTb4b4b4)Tb4b4b4,
Te6edf3colors Tff7b72= Tff7b72if Tb4b4b4(Tff7b72!Te6edf3shouldReplaceTb4b4b4) Te6edf3selectedColors Tff7b72else Te6edf3unselectedColorsTb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3TextTb4b4b4(Te6edf3text Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3addTb4b4b4)Tb4b4b4)
Tb4b4b4}
Te6edf3OutlinedButtonTb4b4b4(
Te6edf3onClick Tff7b72= Tb4b4b4{ Te6edf3shouldReplace Tff7b72= Tff7b72true Tb4b4b4}Tb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3heightTb4b4b4(T79c0ff4T79c0ff8.Te6edf3dpTb4b4b4)Tb4b4b4.Te6edf3weightTb4b4b4(T79c0ff1fTb4b4b4)Tb4b4b4,
Te6edf3enabled Tff7b72= Te6edf3incomingTb4b4b4.Te6edf3lora_config Tff7b72!Tff7b72= Tff7b72nullTb4b4b4,
Te6edf3colors Tff7b72= Tff7b72if Tb4b4b4(Te6edf3shouldReplaceTb4b4b4) Te6edf3selectedColors Tff7b72else Te6edf3unselectedColorsTb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3TextTb4b4b4(Te6edf3text Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3replaceTb4b4b4)Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
T8b949e/* User Actions via buttons */
Te6edf3item Tb4b4b4{
Te6edf3FlowRowTb4b4b4(
Te6edf3horizontalArrangement Tff7b72= Te6edf3ArrangementTb4b4b4.Te6edf3SpaceBetweenTb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3paddingTb4b4b4(Te6edf3horizontal Tff7b72= T79c0ff2T79c0ff4.Te6edf3dpTb4b4b4)Tb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3TextButtonTb4b4b4(Te6edf3onClick Tff7b72= Tb4b4b4{ Te6edf3onDismissTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4) Tb4b4b4{
Te6edf3TextTb4b4b4(
Te6edf3text Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3cancelTb4b4b4)Tb4b4b4,
Te6edf3color Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3onSurfaceTb4b4b4,
Te6edf3overflow Tff7b72= Te6edf3TextOverflowTb4b4b4.Te6edf3EllipsisTb4b4b4,
Te6edf3maxLines Tff7b72= T79c0ff1Tb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3bodyLargeTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Te6edf3TextButtonTb4b4b4(
Te6edf3onClick Tff7b72= Tb4b4b4{
Te6edf3onDismissTb4b4b4(Tb4b4b4)
Te6edf3onConfirmTb4b4b4(Te6edf3selectedChannelSetTb4b4b4)
Tb4b4b4}Tb4b4b4,
Te6edf3enabled Tff7b72= Te6edf3selectedChannelSetTb4b4b4.Te6edf3settingsTb4b4b4.Te6edf3size Tff7b72in T79c0ff1.Tb4b4b4.T79c0ff8Tb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3TextTb4b4b4(
Te6edf3text Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3acceptTb4b4b4)Tb4b4b4,
Te6edf3color Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3onSurfaceTb4b4b4,
Te6edf3overflow Tff7b72= Te6edf3TextOverflowTb4b4b4.Te6edf3EllipsisTb4b4b4,
Te6edf3maxLines Tff7b72= T79c0ff1Tb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3bodyLargeTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tf0883e@PreviewLightDark
Tf0883e@Composable
Tff7b72private Tff7b72fun Td2a8ffScannedQrCodeDialogPreviewTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3ScannedQrCodeDialogTb4b4b4(
Te6edf3channels Tff7b72= Te6edf3ChannelSetTb4b4b4(Te6edf3settings Tff7b72= Te6edf3listOfTb4b4b4(Te6edf3ChannelTb4b4b4.Te6edf3defaultTb4b4b4.Te6edf3settingsTb4b4b4)Tb4b4b4, Te6edf3lora_config Tff7b72= Te6edf3ChannelTb4b4b4.Te6edf3defaultTb4b4b4.Te6edf3loraConfigTb4b4b4)Tb4b4b4,
Te6edf3incoming Tff7b72= Te6edf3ChannelSetTb4b4b4(Te6edf3settings Tff7b72= Te6edf3listOfTb4b4b4(Te6edf3ChannelTb4b4b4.Te6edf3defaultTb4b4b4.Te6edf3settingsTb4b4b4)Tb4b4b4, Te6edf3lora_config Tff7b72= Te6edf3ChannelTb4b4b4.Te6edf3defaultTb4b4b4.Te6edf3loraConfigTb4b4b4)Tb4b4b4,
Te6edf3onDismiss Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4,
Te6edf3onConfirm Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Served by rngit 1.5.0 - Generated in 0.09s